home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format: Get the Most Out of Your Amiga / Amiga Format - Get the Most Out of Your Amiga (1991)(Future Publishing)(GB)(Disk 1 of 2).adf / CLI Tools / whereis.doc < prev    next >
Text File  |  1978-06-19  |  27KB  |  586 lines

  1.                            --- whereis.doc ---           Thursday  15/2/90
  2. **************************************************************************
  3. * whereis.doc (english) for whereis V1.18 (15-02-90) AMIGA-VERSION by    *
  4. * Roland Bless. All rights reserved.                      Doc lines: 585 *
  5. * (C) 1989/90 by Byteable Software Products (Roland Bless)               *
  6. **************************************************************************
  7.  
  8. Yaffu? Yet another "find-that-file" utility? Nah, look at the features of
  9. "whereis"!
  10.  
  11. Please read this to inform yourself about:
  12. 1) What is "whereis" (good for)?
  13. 2) How is it used?
  14. 3) How it works.
  15. 4) What the error-messages mean.
  16.  
  17. Copyright/Distribution:
  18. =======================
  19.  
  20. The program is FREEWARE (what else for this shabby stuff?) and should be
  21. spread to any AMIGA-user around the world, because it is a utility that
  22. saves time (esp. if you're using a harddisk, as I do!).
  23. Please distribute or copy it ALWAYS with this documentation!
  24.  
  25. There are only two restrictions of distribution:
  26. ***************************************************************************
  27. * This software may be distributed for non-profit only!!                  *
  28. * No redistribution of a changed source and/or executable without the     *
  29. * permission of the author!!! Please ask me first. See address below.THANX*
  30. ***************************************************************************
  31.  
  32.  
  33. About this documentation:
  34. =========================
  35. In some examples the quotation marks "" and '' must/need not to be typed.
  36. They are only used to emphasize what you have to type in. Asterisks are
  37. sometimes used to *emphasize* words.
  38. Although there is a short info about the switches of "whereis", please read
  39. this doc in its entirety to get the maximum benefit of this program. If
  40. you're reading this in an editor or text-display program, you can jump to
  41. the sections with searching for 1), 2), 3), or 4).
  42.  
  43.  
  44. RELEASE HISTORY at the end of this document!!
  45. German manual also available!
  46.  
  47.  
  48. Overview of functions:
  49. ======================
  50.  
  51. Format:
  52.  
  53.   whereis [-acdfijnpst] [dev:path] filepattern
  54.  
  55. Wildcards * and ? in the filepattern (strictly;-) allowed!
  56. You can abort anytime with CTRL-D or CTRL-C.
  57.  
  58. Switches:
  59.   -a  all. Same as -st, so date and size will be displayed.
  60.   -c  CASE-SENSITIVE-Search
  61.   -d  dirs only! Only directories are displayed.
  62.   -f  files only! Files are displayed only, no directories!
  63.   -i  Version-Info
  64.   -j  jump into dir! Interactive "cd" function. If wanted, a "cd" will be
  65.       executed and the search aborts. Your current dir has changed.
  66.   -n  no subdirectories! Subdirectories are not scanned.
  67.       (Doesn't make much sense, except for listing functions
  68.        (e.g. 'whereis -nfa "" *'))
  69.   -p  Detailed pathnames! Displays detailed pathnames, if a path was given as an
  70.       argument.
  71.  
  72.   -s  sizes please! Displays sizes of the found files.
  73.  
  74.   -t  time & date! Displays date and time of last change of a file.
  75.       Format: dd-mm-yy hh:mm:ss (Day-Month-Year Hour:Minute:Second)
  76.  
  77. 1) What is "whereis" (good for)?
  78.    =============================
  79.  
  80. "Whereis" is a utility which searches a file(name) on (hard)disk and shows
  81. you the path to this file. Because AMIGA's power is only revealed if you've
  82. installed a hard-disk (and AMIGA's commands are often loaded from disk
  83. (c:-dir)), some hard-disk users (like me) will loose overview about the
  84. stored files. If you have hundreds or thousands of subdirectories and don't
  85. know in which of them the program "DiskSalv" was, just type in: "whereis
  86. disksalv" and "whereis" will search through your whole active volume. You
  87. don't have to look for with "list" or "dir" manually. All files matching
  88. the given filename (-pattern) are displayed.
  89.  
  90. "Whereis" combines a "find that file"-function with certain list functions:
  91. you can use it as "fnams/recurdir/mydir"[1] (or whatever that little
  92. programs are called) to collect the filenames and give them to "ZOO" which
  93. then can compress whole subdirectories or volumes. "Whereis" will do that
  94. job savely for you!
  95.  
  96. ** Note: "whereis" can only be started from a CLI or SHELL (sorry WB Users!).
  97.  
  98. [1] "RecurDir" or "mydir" (that's how the author (Stephen Vermeulen) named it)
  99. was released on Fish-Disk 284. It is recursive programmed and 5516 Bytes long.
  100.  
  101.  
  102. Features of "whereis":
  103. ======================
  104.  
  105. + Case dependent/independent (switch -c).
  106.  
  107. + Wildcards * and ? possible.
  108.  
  109. + Abortable at any time (with CTRL-D or CTRL-C).
  110.  
  111. + Interactive mode which allows to change your current dir.
  112.  
  113. + Non recursive algorithm -> no problems with stack-sizes (not like LookFor or
  114.                                                            RecurDir)
  115. + Works also as "fnams"/"RecurDir". Use "whereis" with pipes.
  116.   (archives all filenames from subdirectories for "ZOO", look below)
  117.  
  118. + Can search on any file-oriented AmigaDOS-device and in any sub-dirs.
  119.   Can be used as a "list all".
  120.  
  121. + Displays date and size of files if wanted.
  122.  
  123. + some other useful options.
  124.  
  125.  
  126. 2) How to use "whereis":
  127.    =====================
  128.  
  129. If the program was not renamed, you can start it from CLI with:
  130.  
  131. whereis [-acdfijnpst] [dev:path] filename
  132.  
  133. The arguments in braces are optional that means they need not to be entered.
  134. If "whereis" is called without any argument, it will display a hint for usage.
  135. It doesn't matter where the options/switches are placed. All options/switches
  136. are preceeded by a '-'-sign.
  137.  
  138. Another possibility to let "whereis" run, is to let it run in the background by
  139. "run", "Arun" or "runback" and so on...(to abort it, when running in background,
  140. just send via the "break" command the break-signal, e.g. "break 2 all").
  141. To redirect the input/output is also allowed, but please note the '-j' switch,
  142. which will always need an interactive input! If the input isn't interactive,
  143. "whereis" will abort with "ERROR: Input must be interactive!".
  144.  
  145. And now something about the syntax:
  146. -----------------------------------
  147. If you enter "whereis filename", the searching for "filename" starts from the
  148. root directory of your current active device/volume/partition. This "filename"
  149. can contain the so called "wildcards" * and ? (therefore better "filepattern"
  150. than "filename").
  151.  
  152. - wildcards: "*" stands for none, one or more character(s).
  153.   ---------- (identical with #? in AMIGA-DOS)
  154.              "?" stands for just one character.
  155.              You can use multiple *s and ?s together!!
  156.  
  157.   Examples:
  158.   *.info     stands for all files containing .info at the end of their name.
  159.   *disk*     stands for all files containing "disk" anywhere in their name.
  160.   ?a*        stands for all files containing an "a" as second character in
  161.              their name.
  162.   ...and so on...
  163.  
  164.              Please note a special behaviour:
  165.              Is there one or more ? at the *end* of the pattern, it is
  166.              possible that ? stands for *none* character, too!
  167.              For example: "a????" displays all files with an "a" as first
  168.              character and 5 characters AT MOST, but all files with less
  169.              than 5 characters in their name are displayed, too (so even 'a',
  170.              'ab','abc'...etc.)!
  171.  
  172.  
  173. - pathnames:
  174.   ----------
  175.   In addition to the necessary filename-pattern you can command "whereis"
  176.   in which directory it should look for. E.g. df0:,dh1:,usr:bin,/bin,include
  177.   and so on... It doesn't matter in which sequence filepattern and pathname
  178.   occur, because "whereis" is a little bit "intelligent"! To separate the
  179.   filepattern from the pathname there must be a ":" or a "/" in the path.
  180.   Otherwise "whereis" will always identify the first argument as pathname and
  181.   the second as filepattern! It is allowed to use "" for the current directory
  182.   and / for the parent directory or : for the root-dir of the current active
  183.   volume. You must enter the path separated from the filenamepattern, because it
  184.   would not make much sense to join them. Consider the following example:
  185.   "whereis dh1:test"
  186.   This looks like test were located in the root-dir of dh1:, but "test" is
  187.   possibly found in "dh1:usr/bin/"? If you recognize this conflict, please
  188.   don't be annoyed about this little extra space. If you nevertheless join
  189.   the path and searchpattern "whereis" will reply with: "ERROR: Please no
  190.   path in the filename/pattern! See usage!".
  191.  
  192.   Examples:
  193.  
  194.   "whereis usr:bin test" will search from "usr:bin" down through all sub-dirs
  195.                          for "test" and is equivalent to "whereis test usr:bin"
  196.   "whereis bin/ test"    will search in the directory "bin" (and downwards) for
  197.                          test, if "bin" is a sub-directory of the current active
  198.                          directory. Equivalent with
  199.   "whereis test bin/"    and
  200.   "whereis bin test"     .
  201.                          *Not* equivalent would be "whereis test bin" (will
  202.                          search for bin!).
  203.   "whereis df1: readme"  searches for readme on df1:.
  204.  
  205.   'whereis "" test'      searches downwards from the current active directory
  206.   'whereis / test'       searches downwards from the parent directory
  207.   'whereis : test'       searches downwards from the root-directory
  208.  
  209.   "whereis /// test" is also allowed!
  210.  
  211. - options/switches:
  212.   -----------------
  213.   switches are always preceeded by a '-'.
  214.  
  215.   a: All. -a is equivalent to -st.
  216.      -a causes the output of size and date/time of the found files.
  217.  
  218.   c: CASE-DEPENDENT or CASE-SENSITIVE.
  219.      -c instructs "whereis" to distinguish upper case from lower case letters.
  220.      The default value is not to distinguish.
  221.  
  222.   d: Directories only! Only names of directories will be displayed.
  223.  
  224.   f: Files only! The outprinted names are exclusively file- and *not*
  225.      directory-names. This option excludes '-d' and vice versa. If you use
  226.      '-df', the output will be none! (Doesn't make much sense, right?)
  227.  
  228.   i: info. Prints the actual version-number of your version.
  229.  
  230.   j: jump into dir!
  231.      This is an interactive useful option: If "whereis" finds a matching
  232.      filename it will prompt "Change to that dir? [yNq]:". Now you have three
  233.      possible responses:
  234.  
  235.      y,Y: Yes, change the current directory of your cli or shell into that in
  236.           which "whereis" found that filename. If "whereis" displayed a dir-
  237.           name, it would change to that dir.
  238.  
  239.      q,Q: Quit. Cancels the search ("whereis-- Aborted!") and you're back to
  240.           your current dir which was active before you started "whereis".
  241.  
  242.      n,N: No, don't change the current dir (skip). Continues the search...!
  243.  
  244.      All other Keys behave like n,N (therefore N is capitalized in [yNq]) and
  245.      continue the search.
  246.  
  247.      Please note that this option is only active with an interactive standard-
  248.      input-device (You must be able to enter something!), otherwise "whereis"
  249.      will abort with an error message: "ERROR: Input must be interactive!", or
  250.      you'll just get the message "Change to that dir? [yNq]:", because the
  251.      standard-input was redirected. In this case, the best is, to cancel with q
  252.      or Q and start again without stdin redirected! Not allowed are e.g.:
  253.      "run whereis -j test" or "whereis <nil: -j test"
  254.  
  255.      This option automatically activates '-p' (detailed pathnames).
  256.  
  257.   n: No sub-directories!
  258.      Only the named directory is scanned and not the nested sub-directories.
  259.      If no directory/pathname was given, only the root-dir will be scanned.
  260.      This option may seem to contradict with the sense of "whereis", because
  261.      you seem already to know, where the file(s) is/are located. I just
  262.      considered the list-function of "whereis" and found out that in some rare
  263.      cases this may be helpful (think about "whereis : * -dn"; it will list all
  264.      branching directories from your root-dir).
  265.  
  266.   p: Detailed pathnames!
  267.      Without any pathname as argument (e.g. whereis test) '-p' hasn't got any
  268.      effect, because "whereis" always displays the most detailed path, likewise
  269.      if the option '-j' is active (AmigaDOS does the same: if you enter "cd
  270.      usr:work", the "cd" will show the detailed path (e.g. MyHD1:usr/work) and
  271.      not "usr:work"!)
  272.  
  273.      With a given pathname (e.g. whereis dh0:usr test) "whereis" (*without* the
  274.      option '-p' activated) displays the *short* path that means the path from
  275.      the given pathname to the found file and not the whole path from the root
  276.      directory to this file. This takes advantage of "assigned directories":
  277.      For example "etc:" is an assigned directory and is located in
  278.      "Rob-HD1:usr/etc". Supposing the file "test" is located in etc:, then '-p'
  279.      has got the following effect:
  280.      Input:                     Output:
  281.  
  282.      "whereis etc: test"    --> "etc:test"
  283.      "whereis -p etc: test" --> "Rob-HD1:usr/etc/test"
  284.  
  285.      Supposing usr: is your current active directory, then you'll get this:
  286.      'whereis "" test'    --> "etc/test"
  287.      'whereis -p "" test' --> "Rob-HD1:usr/etc/test"
  288.  
  289.      If you activate the "LONGPATH"-option, the detailed path will be shown,
  290.      that means also "Rob-HD1:" instead of "dh1:".
  291.  
  292.   s: Sizes (please)! The size of the found files is displayed. If "whereis"
  293.      displays a directory, "(dir)" is printed instead of a size value.
  294.      This option is helpful, if you have some versions of one program on your
  295.      hard-disk and you want to know, which versions are being displayed
  296.      (consider that new versions must not always be longer!). In this case use:
  297.  
  298.   t: Time and date (please)! Date and time of the last change of the found file
  299.      are displayed. This is also useful to distinguish different versions of a
  300.      file (see also option '-a').
  301.      The format of the date is: dd-mm-yy hh:mm:ss
  302.                                (day-month-year hours:minutes:seconds)
  303.  
  304.    ---
  305.    It is not (like in UNIX) of importance where you set the options:
  306.  
  307.    whereis -c dh0: test
  308.    whereis dh0: -c test
  309.    whereis dh0: test -c
  310.  
  311.    are all equivalent.
  312.  
  313.    It doesn't matter either, whether the options stand alone or are encounted
  314.    behind one '-':
  315.  
  316.    whereis -cfp usr: test
  317.    whereis -p usr: test -c -f
  318.    whereis -f usr: -p test -c
  319.    whereis -c -p -f usr: test
  320.    whereis test -pfc usr:
  321.  
  322.    These calls are equivalent, too.
  323.  
  324. - "whereis" and PIPES: Forget "fnams"/"recurdir"!
  325.   -----------------------------------------------
  326.   The archive-program "ZOO" isn't able yet, to pack whole directories with their
  327.   sub-dirs (or whole volumes). Instead it has got an option I, which lets "ZOO"
  328.   read all filenames to compress from standard-input. To collect these filenames,
  329.   there were written some utilities (I got "fnams" and "recurdir" [1])
  330.   Both programs have got one great disadvantage: they work recursive! That
  331.   causes sometimes trouble with your STACK-size and then the GURU will visit
  332.   you. I prefer programs, which can run with a default stack-size of 4000 bytes.
  333.   Because for each program you need to change your STACK-size, maybe you'll get
  334.   confused (think of each process started from the shell with a huge stack-size:
  335.   this will eat up your memory! With 3MB I got enough, but I find it nasty to
  336.   waste memory!). So "whereis" allocates memory, instead of requiring large
  337.   stack-sizes, and naturally warns you and aborts correctly, if you run out of
  338.   memory. Recurdir just said goodbye after scanning 8 nested dirs (If you're
  339.   running UUCP-software, you'll soon get this depth) with a stack of 4000 bytes.
  340.   Note that recurdir/mydir is already 5516 Bytes large and recursive.
  341.  
  342.   If you enter "whereis >usrdir -f usr: *", you can find the whole directory-tree
  343.   of usr: in the file "usrdir".
  344.  
  345.   Ideal is the usage of "whereis" with pipes:
  346.   -------------------------------------------
  347.   Example for the ARP-Shell:
  348.   whereis -fp usr: * | zoo aI usrfiles
  349.  
  350.   Normal Shell:
  351.   run whereis >pipe:files -fp usr: * +
  352.   run zoo <pipe:files aI usrfiles
  353.  
  354.   This should run without any problems [2]!
  355.  
  356.   You can get a sorted output in the ARP-Shell with:
  357.   whereis dh1: c* | sort
  358.  
  359.   Because of this possibility I didn't implement a sort option...
  360.  
  361.   [2]: Attention! The PIP: device from ARP 1.3 (it's the ConHandler from ConMan)
  362.        can guru! The bug is obviously caused by the ConHandler, because other
  363.        programs also lock up, but run fine with the PIPE: device: e.g.
  364.        type foo | sort
  365.        (If foo is large enough, sometimes the PIP: will lock up)
  366.        Because of safety you should perhaps prefer the PIPE:-device.
  367.  
  368. 3) How "whereis works:
  369.    ===================
  370.  
  371. "Whereis" scans all sub-directories branching from the named and displays files,
  372. which match with the search-pattern on standard-output (STDOUT). "whereis" is
  373. not programmed recursive and should not cause a stack overflow!
  374. If an error occurs at execution, "whereis" will display an error-message on the
  375. standard-error-output (STDERR). If you redirected STDOUT, the error-message will
  376. appear on your CLI-Window and not in your output-file.
  377.  
  378. If you made a mistake and don't want to waste time, you can always abort the
  379. scanning with: CTRL-d or CTRL-c
  380. The message "*** BREAK ***" will follow.
  381.  
  382. BUT: The break-signal (CTRL-c/d) is only detected, if "whereis" climbs up one
  383. directory. That means, if you let *display* "whereis" a lot of files (e.g.
  384. "whereis c: *"), it may take a while to react and abort, but "whereis" will
  385. ABORT ALWAYS! One CTRL-D is enough [3]! If there is not a lot of output, CTRL-c
  386. will break as good as CTRL-D, but during output to the window it may react worse
  387. than CTRL-D (try "whereis *"). Just a slight delay will be recognized during
  388. normal use (not as a "list" command abused), and therefore no problems should
  389. arouse. I decided in favour of sparing run-time to handle the break signal not
  390. after each scanned entry, therefore you must accept this litte delay and
  391. disadvantage. No advantage without a disadvantage...
  392. The memory is freed decently at any abort caused by breaks or errors or the '-j'
  393. interactive mode. Everytime "whereis" aborts with the message "-- Aborted!".
  394. Everytime "-- Aborted!" appears, "whereis" returns an error code
  395. (RETURN_ERROR=10). Sometimes other codes are returned.
  396.  
  397. [3]: A WARNING to all ConMan-User (V1.3): If you press CTRL-c or CTRL-d to long,
  398.      the machine will crash! That's no bug of "whereis", but of ConMan V1.3.
  399.      It took some time for me to recognize that my setsignal-routines are ok.
  400.      Using NEWCON: or (the original) CON: you'll have no problems!
  401.  
  402. - How to use "whereis" more efficiently
  403.   -------------------------------------
  404.   Reduce, if possible, the directories that should be scanned!
  405.   Use "assigned directories": e.g. "whereis utils: disksalv"
  406.   The scan-time will be shortened, because to search a whole partition or
  407.   hard-disk will take a while (ca. 1 min for 20MBytes, depends strongly on your
  408.   "scan- speed"/"access-time" of your hard-drive!). Another possibility is, to
  409.   start "whereis" as a background-process, while you are working on other tasks
  410.   (what the hell is Multitasking else for?): e.g. "run whereis >T:found dh1:
  411.   *.c". Perhaps that is to use, if you can't restrict the search to a few
  412.   directories and must search the whole volume, but you want to continue your
  413.   work (write a text or program etc...).
  414.  
  415. 4) What the error-messages mean:
  416.    =============================
  417.  
  418. Possible error-messages and their causes:
  419.  
  420.   "FATAL ERROR: Not enough memory available!"
  421.   -------------------------------------------
  422.   Cause: Perhaps other programs allocated too much memory. "Whereis" needs
  423.          just a few bytes of memory to remember the directories, which type
  424.          of memory, FAST-, CHIP- or what else RAM, serves doesn't matter.
  425.  
  426.   "ERROR: Can't find that directory or device:"
  427.   ---------------------------------------------
  428.   Cause: Perhaps you mis-spelled the path. "Whereis" cannot get a "lock" on
  429.          this directory or device!
  430.  
  431.   "ERROR: Destroyed entry! Couldn't examine this ' '. Very strange!"
  432.   ------------------------------------------------------------------
  433.   Cause: I don't know either!...strange: "whereis" was able to get a "lock" on
  434.          the entry, but EXAMINE returned an error!
  435.  
  436.   "ERROR: Can't handle so many arguments. See usage!"
  437.   ---------------------------------------------------
  438.   Cause: You gave "whereis" more arguments than just the pattern and the path.
  439.  
  440.   "ERROR: Please no path in the filename/pattern! See usage!"
  441.   -----------------------------------------------------------
  442.   Cause: You joined path and pattern! The filename contains a "/" or ":".
  443.   See section "How to use whereis - pathnames".
  444.  
  445.   "ERROR: Illegal Option ' '!"
  446.   ----------------------------
  447.   Cause: This option (all preceeded by the "-") is unknown to "whereis".
  448.  
  449.   "ERROR: I've no filepattern to search for!"
  450.   -------------------------------------------
  451.   Cause: "whereis" always needs a filename/pattern to search for.
  452.          You only entered an option/switch.
  453.  
  454.   "STRANGE ERROR: Something strange happend...!"
  455.   ----------------------------------------------
  456.   Cause: While descending the directory-tree, "whereis" cannot get a "lock"
  457.          on a subdirectory. This error should *never* occur!
  458.          Another possibility is a fault during the CD, if you enable the
  459.          interactive mode (switch '-j').
  460.  
  461.   "ERROR: Input must be interactive!"
  462.   -----------------------------------
  463.   Cause: This error occurs only in conjunction with the "-j" (interactive)
  464.   option. Perhaps you tried to run the interactive mode in background ("run
  465.   whereis -j ...") or you redirected the standard-input to a non input-
  466.   device ("whereis <t:tmp -j ..."). Please start again without "run" or "<".
  467.  
  468.  
  469. Future enhancements?!
  470. =====================
  471.  
  472. If you find this utility quite useful and better than all other "find-that-file"-
  473. utilities, and if there are no "flames", I could add some features:
  474.  
  475. - a listing option. The output of date and size will then be formatted. Until
  476.   this option is implemented use "list" instead and pipes.
  477.  
  478. - search for date. Since/upto option like implemented in "list". In some cases
  479.   it would be useful to find the files again, which you used and got today or
  480.   yesterday or last week...
  481.  
  482. - A faster and more compact code (perhaps with help of assembler-routines).
  483.   I think this would produce much more speed, maybe about 5%. The speed
  484.   depends more on your hard-disk and controller!
  485.  
  486.  
  487. A few words from the author...
  488. ==============================
  489.  
  490. I wrote this program, because I was fed up to look for programs with my
  491. former "whereis/wo/findpath/find..." utilities:
  492. All of them had aggravating deficiencies.
  493. Either no case-independent search or not abortable, or to slow and now
  494. wildcards :-(. Because I learned C, I thought of making it better (I hope
  495. it succeeded...:-)! Because good literature is rare and I prefer the
  496. English/American originals it wasn't easy to get the amiga under control...
  497. I missed a good manual for the dos.library, but nevertheless the first
  498. working version was ready after one week (I did the work a few hours each
  499. day)...
  500. In comparison with "LookFor" (distributed on Fish-Disk 274, Author: Mark
  501. Schretlen, size: 11224 bytes), which doesn't offer any special options and
  502. requires more stack than 4000 bytes, "whereis" was faster:
  503. Scanning 3210 entries yielded on my system:
  504.  
  505. LookFor: 69.46 s  [lookfor >nil: test on sc1:]        3 entries found
  506. Whereis: 59.78 s  [whereis >nil: sc1: test]           4 entries found
  507. Find   : 61.40 s  [find >nil: sc1: -name test -print] 4 entries found
  508.  
  509. As you can see, the times of "find" and "whereis" are very similar. Perhaps
  510. little differences are caused by caching in buffers or other side effects.
  511. All programs were held and started from ram-disk.
  512. BTW: "whereis" runs fine with 4000 bytes of stack. LookFor requires more stack.
  513.      The "LookFor" option "LookFor test on all" caused an error, because I
  514.      mounted the PIPE: device. LookFor couldn't manage this!
  515.  
  516. I don't want to annoy the authors of the "fnams|recurdir|mydir" utilities, but
  517. "whereis" combines *two* functions in one program! ;-)
  518.  
  519. Play with "whereis" and it's features and perhaps you'll discover new
  520. applications.
  521. I hope that this utility will be placed in every programmers utility-dir to
  522. make it easier for their work (Hi Matt?:-).
  523.  
  524. ** Have Fun! **
  525.  
  526. Best wishes,
  527.  Roland Bless
  528.  
  529. P.S.: I want to thank Matt Dillon for his great DME! Thanx Matt!
  530.       All others, please excuse my poor English, but it isn't my
  531.       native language. I will welcome some hints about shabby faults.
  532.  
  533. --------------------------------------------------------------------------------
  534.  
  535. RELEASE-HISTORY:
  536. ----------------
  537. V1.14 : First released ;-) version of "whereis".
  538.         KNOWN BUGS: Requires FAST-RAM. Doesn't run with NOFASTMEM!
  539.  
  540. V1.14a: Fixed the bug of V1.14.
  541.         NOT RELEASED.
  542.  
  543. V1.15:  Some new useful options/switches.
  544.         -a, -s, -t, -f, -d, -p -n
  545.         KNOWN BUGS: -a Option (forgot a break ...:-).
  546.         NOT RELEASED.
  547.  
  548. V1.16:  Source optimized: minimal faster, but less Code than in V1.15.
  549.         Bug fixed (-a option). Errorhandling completed:
  550.         No filepattern to search for...
  551.         KNOWN BUGS: If there is not enough free memory, "whereis" would
  552.                     abort with an error message, but the allocated memory
  553.                     won't be freed correctly.
  554.                     Fixed in versions since 26-11-89.
  555.  
  556.         Wildcard-handling improved: "*?*??*a*c" etc. is now perfect!
  557.  
  558. V1.16a: A BUG in the wildcard-handling fixed:
  559.         Filenames with a space in it, were not displayed, if the '*'-wildcard
  560.         was selected. Really a subtle bug! Didn't occur when the -c option was
  561.         active, because then toupper() was not used.
  562.         (Note: 0x020 & 0x5f == '\0')
  563.         I found this bug by accident (do you often have files with a space
  564.         in their name? I don't!)
  565.  
  566.         ALL versions till V1.16a (inclusive) was released just in a few bbs in
  567.         germany (FRG).
  568.  
  569. V1.17:  -j option added.
  570.         -p switch changed! (see option -p).
  571.         Checked the break-behaviour. All ok.
  572.         KNOWN BUGS: The CD to a volume killed the ":" at the end of its name.
  573.                     That was not like AmigaDOS did.
  574.  
  575. V1.18   The little bug of 1.17 corrected. CD should work now.
  576.         KNOWN BUGS: none.
  577.  
  578. +-----------------------------------------------------------------------------+
  579. |R o l a n d   B l e s s |UUCP: rob%spirit@impch.imp.com (worldwide)          |
  580. |                        |      rob@spirit.UUCP          (FRG only!! See BANG)|
  581. |Moersenbroicher Weg 151 | FAX: +49211623818 | BTX:0211623818-0001            |
  582. |FRG- 4000 Duesseldorf 30|----------------------------------------------------|
  583. |voice +49 211 623817    |"They build machines that they can't control" STING |
  584. |BANG:...uunet!impch!altger!doitcr!tmpmbx!mfehr!krefcom!spirit!rob            |
  585. +---------s-p-i-r-i-t-s---i-n---t-h-e---m-a-t-e-r-i-a-l---w-o-r-l-d-----------+
  586.